home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / (A)F / (A)F1.ADF / chop3.msb < prev    next >
Text File  |  1986-06-08  |  2KB  |  83 lines

  1. 'Autochop--chops Xmodem-downloaded files by itself if hunkend can be
  2. '          found, else it asks user to specify file length.
  3. '          Based on Chop2.MSB and Fixobj.EXE.  Created 3/21/86 by Charles Tyson.
  4.  
  5. CLEAR,50000&,4000
  6. DEFLNG a-z
  7. buff=22528
  8. count=0
  9. fm$="Bytes copied: #######"
  10. hunkend$=CHR$(&H3)+CHR$(&HF2)
  11.  
  12. autochop:
  13.   LINE INPUT "Source file: ";infile$
  14.   PRINT
  15.   ON ERROR GOTO Errfile
  16.   OPEN infile$ AS 1 LEN=128
  17.   ON ERROR GOTO 0
  18.   FIELD 1,128 AS buff$
  19.   length=LOF(1)
  20.   recs=length\128
  21.   IF length-128*recs<>0 THEN PRINT infile$;" doesn't show signs of padding.":END
  22.   ON ERROR GOTO errrec
  23.   GET 1,recs
  24.   ON ERROR GOTO 0
  25.   testat=127:endat=0
  26.   WHILE (testat AND NOT endat)
  27.     endat=INSTR(testat,buff$,hunkend$)
  28.     testat=testat-1
  29.   WEND
  30.   IF endat<>0 THEN
  31.     total=128*(recs-1)+endat+1
  32.     PRINT "I think I'll chop this file from";length;"to";total;"bytes."
  33.     PRINT "Hit ESC if you disapprove, any other key if that's okay."
  34.     PRINT
  35.     IF INPUT$(1)<>CHR$(27) THEN chopit
  36.   ELSE
  37.     PRINT "Sorry, ";infile$;" can't be autochopped."
  38.     PRINT
  39.   END IF
  40.   
  41. Selfchop:
  42.   INPUT "Number of bytes to copy";total
  43.   PRINT
  44.   IF total>=length OR total<1 THEN PRINT "But ";infile$;" is only";length;"bytes long!":END
  45.  
  46. chopit:
  47.   LINE INPUT "Destination file: ";outfile$
  48.   PRINT
  49.   row=CSRLIN
  50.   CLOSE 1
  51.   ON ERROR GOTO Errfile
  52.   OPEN infile$ AS 1 LEN=buff
  53.   OPEN outfile$ FOR OUTPUT AS 2
  54.   ON ERROR GOTO 0
  55.   FIELD 1,buff AS buff$
  56.   PRINT USING fm$;count
  57.  
  58. Action:
  59.   WHILE count<total  
  60.     ON ERROR GOTO errrec
  61.     GET 1
  62.     ON ERROR GOTO 0
  63.     count=count+buff
  64.     IF count<=total THEN
  65.       PRINT#2,buff$;
  66.     ELSE
  67.       PRINT#2,LEFT$(buff$,total+buff-count);
  68.       count=total
  69.     END IF
  70.     LOCATE row,1
  71.     PRINT USING fm$;count
  72.   WEND
  73.   END
  74.  
  75. Errfile:
  76.   CLOSE
  77.   PRINT "Oops, check those file names!"
  78.   RESUME autochop
  79.   
  80. errrec:
  81.   RESUME NEXT
  82.                   
  83.